<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="errorpage.jsp"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<jsp:useBean id='oMD5' scope='request' class='com.desksoft.common.MD5'/>
<%
//特别提示：本程序未在JSP环境进行测试，如有问题，请及时反馈给我们，谢谢！
//#############################################################
//#            贺喜支付平台支付接口服务器端通知接收程序
//#                          v2.3jsp
//#                   http://www.168reg.cn
//#
//#  版权所有: 株洲市和谐网络科技发展有限公司
//#
//#  主页地址: http://www.168reg.cn
//#  技术支持: support@168reg.cn
//#  技 术 QQ: 359465724
//#  技术QQ群：8246422，7048987
//#
//#############################################################
//# ・郑重声明:
//# ・此程序不得随意公开发布、销售或进行其他非法转让。
//# ・如对此程序有任何疑问，请在管理区留言。
//#############################################################

//本文件功能介绍：
//1、根据自己的密钥设置验证返回的加密字符串是否正确。
//2、向贺喜支付平台反馈处理成功的字符。
//3、如果返回的提交有错误，即显示失败信息。
//4、为了增强反馈定单的安全性，系统返回的加密字符串由“支付平台定单号+商户订单号+自定义字段1+自定义字段2+成功支付金额+支付方式编号+商户编号+定单支付状态+商户密钥+支付模式”经过MD5加密后产生的。下面的程序已经完成了此加密字符串的验证。
//5、为了防止黑客通过不正常的手段恶意反馈(刷新)接收页面，请您在此程序中加入验证定单号的功能，即每一个成功定单只能反馈一次此页面。
//6、反馈的数据您都可以充分利用并添加到您自己的数据库中。

//初始化定义参数
//商户编号，请把您的商户编号替换掉这里的0值。
String reg_userid="0";
//商户密钥，请把您的商户密钥替换掉这里的空值。
String reg_key="";
//您可以充分利用以下反馈信息并添加到您自己的数据库中。
String v_orderid=new String(request.getParameter("v_orderid"));   //贺喜支付平台反馈的定单号
String v_orderdate=new String(request.getParameter("v_orderdate"));   //定单成交时间
String v_price=new String(request.getParameter("v_price"));   //定单成交价格，以分为单位
String v_billno=new String(request.getParameter("v_billno"));   //商户订单号
String v_custom1=new String(request.getParameter("v_custom1"));   //自定义字段1
String v_custom2=new String(request.getParameter("v_custom2"));   //自定义字段2
String v_mobileno=new String(request.getParameter("v_mobileno"));   //用户支付的手机号码,仅手机短信注册时有效
String v_servicename=new String(request.getParameter("v_servicename"));   //支付订单的服务名称
String v_payvia=new String(request.getParameter("v_payvia"));   //用户选择的支付途径，1：银行卡在线支付；2：声讯电话支付；3：互联星空支付；4：手机短信注册；5：腾讯财付通支付；6：腾讯Q币支付；7：神州行充值卡支付；8，盛大游戏点卡支付；9，支付宝支付；10，手机银行支付；11，北京宽带支付；12，联通充值卡支付
String v_payviastr=new String(request.getParameter("v_payviastr"));   //用户选择的支付途径中文名称
String v_md5=new String(request.getParameter("v_md5"));   //返回的加密字符串
String v_pstatus=new String(request.getParameter("v_pstatus"));   //定单成功反馈的字符串，有1和0两种情况。主要用于验证是否属正常反馈。1为成功。
String v_pstring=new String(request.getParameter("v_pstring"));   //定单支付状态说明。
String v_paymode=new String(request.getParameter("v_paymode"));   //当前定单运行模式，仅启用测试模式时有效，值为testmode。
String v_server=new String(request.getParameter("v_server"));   //当前定单通知的模式，1为服务器端通知。

//-----------重新计算md5的值，验证返回的数字签名是否正确------------------------------------------------

if(v_pstatus.equals("1")){
	String text = v_orderid+v_billno+v_custom1+v_custom2+v_price+v_payvia+reg_userid+v_pstatus+reg_key+v_paymode;		//为正确数值串拼凑顺序
	String digestString = oMD5.getMD5ofStr(text);  //计算MD5的值
	if (digestString.equals(v_md5)){
	
//建议在此对定单号进行验证以防止用户刷新返回页面多次获得服务。
//下面请显示通知成功的代码
%>Y<%
}
else
{
//下面请放入定单支付失败页面的HTML代码
%>N<%
}}
%>